home *** CD-ROM | disk | FTP | other *** search
/ TestDrive Windows 1993 Fall / TestDrive Windows 1993 Fall.iso / dbase / samples / orders.prg < prev    next >
Encoding:
Text File  |  1993-03-09  |  11.4 KB  |  325 lines

  1. ******************************************************************************
  2. * PROGRAM NAME: ORDERS.PRG
  3. *               ORDERS TRANSACTIONS DATABASE SCREEN
  4. *               SAMPLE BUSINESS APPLICATION PROGRAM
  5. * LAST CHANGED: 09/25/89 09:26AM
  6. * WRITTEN BY:   Borland International Inc.
  7. ******************************************************************************
  8. *
  9. *       FILES USED IN CUSTOMER FILE:
  10. *       Database    =  Orders.dbf
  11. *       Index file  =  Orders.mdx
  12. *        TAG: Order =  cust_id+DTOC(date_trans)+po_number <= Master index
  13. *       External Procedure File used: Library.prg
  14. ******************************************************************************
  15.  
  16. * Main procedure
  17. PROCEDURE Orders
  18.  
  19.    * Link to external procedure file of 'tool' procedures
  20.    SET PROCEDURE TO Library
  21.  
  22.    * Set database environment
  23.    DO Set_env
  24.    SET NEAR on
  25.    SET COLOR TO &c_standard.
  26.  
  27.    * Declare Variables Used:
  28.    * Database memory variables
  29.    STORE "" TO cust_id, po_number, emp_id, part_id
  30.    STORE {  /  /  } TO date_trans
  31.    part_qty = 0
  32.    invoiced = .F.
  33.  
  34.    * Misc variables - used to pass parameters to Library
  35.    * for Find record, Output reports, List records and other options
  36.    dbf   = "ORDERS"                   && std report is available
  37.    mlist = "NOT AVAILABLE"            && no mailing list is available
  38.    STORE "N/A" TO cust_rpt            && no custom reports are available
  39.    key  = "m->cust_id+DTOC(m->date_trans)+m->po_number"
  40.    key1 = "m->cust_id"
  41.    key2 = "m->date_trans"
  42.    key3 = "m->po_number"
  43.    keyname1 = "Cust ID:"
  44.    keyname2 = "Date of Order:"
  45.    keyname3 = "P.O. Number:"
  46.    list_flds = "CUST_ID,DATE_TRANS,PO_NUMBER,PART_ID,PART_QTY,Goods->PRICE"
  47.    STORE "" TO mcustid, mpartid, mempid
  48.  
  49.    gl_Error = .F.
  50.    DO OrdersM
  51.  
  52.    RELEASE gl_MainMenu                  && Allow Rest_env to reset the
  53.    DO Rest_env                          && environment back.
  54.    ON ERROR
  55.    ON KEY LABEL F1
  56.    CLEAR ALL
  57.    CLOSE ALL
  58.    CLEAR
  59.  
  60. RETURN
  61.  
  62. PROCEDURE OrdersM
  63.    * Open databases and choose active indexes
  64.    SELECT 1
  65.    USE Orders   ORDER Order
  66.    USE Goods    ORDER Part_id IN 2
  67.    USE Cust     ORDER Cust_id IN 3
  68.    USE Employee ORDER Emp_id  IN 4
  69.    SET RELATION TO part_id INTO Goods, cust_id INTO Cust, emp_id INTO Employee
  70.    GO TOP
  71.  
  72.    record_num = RECNO()
  73.    DO Load_fld
  74.  
  75.    * Show data screen
  76.    CLEAR
  77.    DO Dstatus
  78.    DO Backgrnd
  79.    DO Show_data
  80.  
  81.    * Define popup bar menus of user choices
  82.    DO Bar_def
  83.  
  84.    * Activate main popup bar menu - execute user choices
  85.    SET COLOR TO &c_popup.
  86.    ACTIVATE POPUP main_mnu
  87.    DO Sub_ret
  88.    *
  89. RETURN
  90. *==============================end of main procedure==========================
  91.  
  92. *  UTILITY PROCEDURES (PROPRIETARY TO Orders)
  93.  
  94. PROCEDURE Filter
  95.    * Filter (group) data into subset
  96.    * Select subset to set up filter condition  (Y=turn on, N=abort selection,
  97.    * T=turn off). If filter is already on, set default choice to Turn off,
  98.    * show window. If filter is not on, set default choice to Yes; show window.
  99.    choice = IIF(filters_on,"T","Y")
  100.    DO Filt_ans
  101.    IF choice = "Y"
  102.       * Start process of choosing filter condition.
  103.       *
  104.       mcustid    = SPACE(6)
  105.       mpartid    = SPACE(10)
  106.       mempid     = SPACE(11)
  107.       ACTIVATE WINDOW alert
  108.          * Get user's filter condition selection(s)
  109.          @  0, 0 SAY "-------- ENTER FILTER CONDITION -------"
  110.          @  2, 0 SAY "CUST.I.D.:"     GET mcustid     FUNCTION "!" ;
  111.             MESSAGE "Enter a six digit customer ID beginning with a " + ;
  112.                     " letter - Esc to quit"
  113.          @  3, 0 SAY "PART I.D.:"     GET mpartid     FUNCTION "!"
  114.          @  4, 0 SAY "EMPLOYEE I.D.:" GET mempid
  115.          @  5, 0 SAY "Enter one or more conditions"
  116.          READ
  117.      DEACTIVATE WINDOW alert
  118.      * Initialize filter condition variable to null (empty)
  119.      subset = " "
  120.      * Process user's entries to build filter condition
  121.      mcustid   = TRIM(mcustid)
  122.      mpartid   = TRIM(mpartid)
  123.      mempid    = TRIM(mempid)
  124.      subset =  subset + IIF("" <> mcustid,"cust_id = '&mcustid.' .AND. ","")
  125.      subset =  subset + IIF("" <> mpartid,"part_id = '&mpartid.' .AND. ","")
  126.      subset =  subset + IIF("" <> mempid, "emp_id = '&mempid.'  .AND. ","")
  127.      *
  128.      IF "" = TRIM(subset)     && Check whether data entered into subset string
  129.         * If nothing entered, exit
  130.         DO Warnbell
  131.         filters_on = .F.
  132.      ELSE
  133.         * If string is not empty, truncate the .AND. from end of subset string
  134.         subset = SUBSTR(subset,1,LEN(subset)-6)
  135.         SET FILTER TO &subset.   && Filter on entered filter string condition
  136.         GO TOP                   && Activate filter by moving record pointer
  137.         * Check whether filter condition matches any records (no match=EOF)
  138.         filters_on = .NOT. EOF()
  139.         IF .NOT. filters_on           && Filter is off if filters_on = .F.
  140.            DO Warnbell
  141.            DO Show_msg WITH "No Orders records match the Filter condition."
  142.            SET FILTER TO
  143.            GO record_num
  144.         ENDIF
  145.       ENDIF
  146.    ELSE
  147.       IF choice = "T"
  148.          * If user selects "T", turn off filter
  149.          SET FILTER TO
  150.          filters_on = .F.
  151.       ENDIF
  152.    ENDIF
  153. RETURN
  154.  
  155. PROCEDURE Indexer
  156.    * Create/rebuild index
  157.    INDEX ON cust_id+DTOC(date_trans)+po_number TAG Order
  158.    GO TOP
  159. RETURN
  160.  
  161. PROCEDURE Init_fld
  162.    * Initialize memory variables values for data entry
  163.    cust_id    = SPACE(6)
  164.    date_trans = DATE()
  165.    po_number  = SPACE(5)
  166.    emp_id     = SPACE(11)
  167.    part_id    = SPACE(10)
  168.    part_qty   = 0
  169.    invoiced   = .F.
  170. RETURN
  171.  
  172. PROCEDURE Load_fld
  173.    * Copy fields from ORDERS database record into memory variables
  174.    cust_id    = cust_id
  175.    date_trans = date_trans
  176.    po_number  = po_number
  177.    emp_id     = emp_id
  178.    part_id    = part_id
  179.    part_qty   = part_qty
  180.    invoiced   = invoiced
  181. RETURN
  182.  
  183. PROCEDURE Repl_fld
  184.    * Replace database file fields with contents of memory variables
  185.    REPLACE cust_id WITH m->cust_id, po_number WITH m->po_number,;
  186.            date_trans WITH m->date_trans, emp_id WITH m->emp_id, ;
  187.            part_id WITH m->part_id, part_qty WITH m->part_qty, ;
  188.            invoiced  WITH m->invoiced
  189. RETURN
  190.  
  191. FUNCTION Prof_mgn
  192.    PARAMETERS cost,price
  193.    * Calculate profit margin
  194.    margin = ROUND((price-cost)/price*100,1)
  195. RETURN margin
  196.  
  197. PROCEDURE Backgrnd
  198.    * Show background screen
  199.    @  1,18 TO  3,49 DOUBLE COLOR &c_blue.
  200.    @  5, 2 TO  8,56 DOUBLE COLOR &c_red.
  201.    @ 16, 2 TO 16,56        COLOR &c_red.
  202.    @  9, 2 TO 18,56        COLOR &c_red.
  203.    @  2,19 FILL TO  2,48   COLOR &c_blue.
  204.    @  6, 3 FILL TO  7,55   COLOR &c_red.
  205.    @ 10, 3 FILL TO 17,55   COLOR &c_red.
  206.    @  6, 3 FILL TO 17,55   COLOR &c_red.
  207.    SET COLOR TO &c_data.
  208.    @  2,20 SAY "ORDERS TRANSACTIONS DATABASE"
  209.    @  6, 4 SAY "CUSTOMER ID:"
  210.    @  7, 4 SAY "ORDER DATE:"
  211.    @  7,35 SAY "P.O. NUMBER:"
  212.    @ 10, 4 SAY "PART #:"
  213.    @ 11, 4 SAY "PART NAME:"
  214.    @ 12, 4 SAY "QTY. ORDERED:"
  215.    @ 12,25 SAY "each"
  216.    @ 12,35 SAY "PRICE: $"
  217.    @ 13, 4 SAY "QTY. AVAILABLE:"
  218.    @ 13,25 SAY "each"
  219.    @ 13,35 SAY "MARGIN:"
  220.    @ 13,53 SAY "%"
  221.    @ 14, 4 SAY "EMPLOYEE #:"
  222.    @ 15, 4 SAY "INVOICED:"
  223.    @ 17, 4 SAY "NOTES:"
  224.    SET COLOR TO &c_standard.
  225. RETURN
  226.  
  227. PROCEDURE Show_data
  228.    * Show data screen
  229.    SET COLOR TO &c_fields.
  230.    @  6,18 SAY cust_id
  231.    @  7,18 SAY date_trans
  232.    @  7,48 SAY po_number
  233.    @ 10,18 SAY part_id
  234.    @ 12,21 SAY part_qty   PICTURE "999"
  235.    @ 14,16 SAY emp_id
  236.    @ 15,14 SAY invoiced  PICTURE  "Y"
  237.    @ 17,14 SAY Notes
  238.    IF .NOT. BAR() = 2           && not Add mode
  239.       @  6,26 SAY Cust->Customer                        COLOR &c_yelowhit.
  240.       @ 11,18 SAY Goods->Part_name                      COLOR &c_yelowhit.
  241.       @ 12,44 SAY Goods->Price      PICTURE "99,999.99" COLOR &c_yelowhit.
  242.       @ 13,21 SAY Goods->Qty_onhand PICTURE "999"       COLOR &c_yelowhit.
  243.       @ 13,48 SAY Prof_mgn(Goods->Cost,Goods->Price) ;
  244.               PICTURE "99.9" COLOR &c_yelowhit.
  245.       @ 14,30 SAY TRIM(Employee->Firstname)+" "+ Employee->Lastname ;
  246.               COLOR &c_yelowhit.
  247.    ELSE
  248.       * Mode is Add: clear screen field areas of related data
  249.       @  6,26 SAY SPACE(30)    && CUSTOMER
  250.       @ 11,18 SAY SPACE(20)    && PARTNAME
  251.       @ 12,44 SAY SPACE(9)     && PRICE
  252.       @ 13,21 SAY SPACE(3)     && QTY ONHAND
  253.       @ 13,48 SAY SPACE(4)     && MARGIN
  254.       @ 14,30 SAY SPACE(26)    && EMPLOYEE
  255.    ENDIF
  256.    IF ISCOLOR()
  257.       @ 20, 4 SAY "Yellow text/numbers - from related databases or calc." ;
  258.          COLOR &c_yelowhit.
  259.    ELSE
  260.       @ 20, 4 SAY "Dim text/numbers - from related databases or calc." ;
  261.          COLOR &c_red.
  262.    ENDIF
  263.    SET COLOR TO &c_standard.
  264. RETURN
  265.  
  266. PROCEDURE Get_data
  267.    * Show screen for data entry
  268.    SET COLOR TO &c_data.
  269.    @  6,18 GET m->cust_id    PICTURE  "!99999" ;
  270.            VALID Lookupid(m->cust_id,"Cust","Customer", 2) ;
  271.            ERROR "Invalid customer I.D. number, please re-enter." ;
  272.            MESSAGE "Enter a six digit customer ID (beginning with a " + ;
  273.                    "letter) - Esc to quit"
  274.    @  7,18 GET m->date_trans FUNCTION "D" ;
  275.            MESSAGE "Enter date of this order"
  276.    @  7,48 GET m->po_number  FUNCTION "!" ;
  277.            MESSAGE "Enter customer's P.O. number"
  278.    @ 10,18 GET m->part_id    FUNCTION "!" ;
  279.            VALID Lookupid(m->part_id,"Goods", "Part", 3) ;
  280.            ERROR "Invalid part ID number, please re-enter." ;
  281.            MESSAGE "Enter a part ID number, or Esc to quit"
  282.    @ 12,21 GET m->part_qty   PICTURE "999" ;
  283.            MESSAGE "Enter quantity of parts ordered"
  284.    @ 14,16 GET m->emp_id PICTURE "999-99-9999" ;
  285.            VALID Lookupid(m->emp_id, "Employee", "Employee", 6) ;
  286.            ERROR "Invalid employee ID number, please re-enter." ;
  287.            MESSAGE "Enter an employee ID number, or Esc to quit"
  288.    @ 15,14 GET m->invoiced  PICTURE  "Y" ;
  289.            MESSAGE "Enter whether this order has been invoiced " + ;
  290.                    "(usually done by system)"
  291.    @ 17,14 GET Notes WINDOW memo_windo ;
  292.            MESSAGE "Enter notes into memo field, press " + ;
  293.                    "Ctrl-Home to enter (Ctrl-End to exit)"
  294.    IF .NOT. BAR() = 2           && not Add mode
  295.       @  6,26 SAY Cust->Customer                        COLOR &c_yelowhit.
  296.       @ 11,18 SAY Goods->Part_name                      COLOR &c_yelowhit.
  297.       @ 12,44 SAY Goods->Price      PICTURE "99,999.99" COLOR &c_yelowhit.
  298.       @ 13,21 SAY Goods->Qty_onhand PICTURE "999"       COLOR &c_yelowhit.
  299.       @ 13,48 SAY Prof_mgn(Goods->Cost,Goods->Price) ;
  300.               PICTURE "99.9" COLOR &c_yelowhit.
  301.       @ 14,30 SAY TRIM(Employee->Firstname)+" "+ Employee->Lastname ;
  302.               COLOR &c_yelowhit.
  303.    ELSE
  304.       * Mode is Add: clear screen field areas of related data
  305.       @  6,26 SAY SPACE(30)    && CUSTOMER
  306.       @ 11,18 SAY SPACE(20)    && PARTNAME
  307.       @ 12,44 SAY SPACE(9)     && PRICE
  308.       @ 13,21 SAY SPACE(3)     && QTY ONHAND
  309.       @ 13,48 SAY SPACE(4)     && MARGIN
  310.       @ 14,30 SAY SPACE(26)    && EMPLOYEE
  311.    ENDIF
  312.    IF ISCOLOR()
  313.       @ 20, 4 SAY "Yellow text/numbers - from related databases or calc." ;
  314.          COLOR &c_yelowhit.
  315.    ELSE
  316.       @ 20, 4 SAY "Dim text/numbers - from related databases or calc." ;
  317.          COLOR &c_red.
  318.    ENDIF
  319.    SET COLOR TO &c_standard.
  320.    ON KEY LABEL F9 DO Findcust WITH m->cust_id
  321.    ON KEY LABEL F10 DO Findpart WITH m->part_id
  322. RETURN
  323. ************************************** END OF ORDERS.PRG *********************
  324.  
  325.